**************************************************** How the concept of a class links to a smart contract **************************************************** Smart contracts in C# are intrinsically linked to object-oriented design even when they are very basic. Being object-oriented also enables smart contracts to inherit methods and properties. This allows a level of basic smart contract functionality to be readily available to all smart contracts via base class methods and properties. The smart contract constructor --------------------------------- Deployment of a smart contract involves calling the constructor for the smart contract class. This is where any initialization of the smart contract should take place. Before we look at what the constructor does, let's examine its syntax. Firstly, as previously mentioned, all smart contracts in C# inherit from ``SmartContract``. It is mandatory to include the following line at the top of the file: :: using Stratis.SmartContracts; This allows a smart contract to inherit from the base ``SmartContract`` class. The class declaration specifies that your class inherits from the ``SmartContract`` class: :: [Deploy] public class HelloWorld : SmartContract { ... } The ``[Deploy]`` attribute only needs to be specified when more than one class is declared in the file, but specifying it anyway is fine. When a smart contract is deployed, the entire C# file is compiled into Common Intermediate Language (CIL), which is then supplied to the deployment call. The first parameter passed to the constructor must be an object conforming to the ``ISmartContractState`` interface: :: public HelloWorld(ISmartContractState smartContractState) : base(smartContractState) { ... } You can define additional parameters, and when you deploy the smart contract, you only need to specify arguments for the parameters you defined. The first parameter is handled internally. The ``base`` constructor (the ``SmartContract`` constructor) must also be called with the ``ISmartContractState`` parameter, and you can see this in the code above. The name of the first parameter could theoretically be changed, but ``smartContractState`` will work fine. ************************************ Greeting - a smart contract property ************************************ In our Hello World example, we do one thing and that is initialize the ``Greeting`` property: :: this.Greeting = "Hello World!"; The actual line initiating the ``Greeting`` property is fairly self-explanatory. Let's take a look at the property getter and setters. :: private string Greeting { get { return this.PersistentState.GetString("Greeting"); } set { this.PersistentState.SetString("Greeting", value); } } The ``PersistentState`` property belongs to the ``SmartContract`` class and facilitates the storage and retrieval of data (in this case a string). Smart contract data is stored as a series of key-value pairs and in this case **Greeting** is used as the key. The ``Greeting`` property is marked as private as there is no need for it to be accessed from anywhere other than inside the smart contract. Unlike methods, C# properties on a smart contract cannot be called even if they are public. SayHello() - a smart contract method -------------------------------------- Finally, let's look at the simple method ``Greeting()``, which returns the "Hello World!" string. :: public string SayHello() { return this.Greeting; } As you can see, this method just accesses the ``Greeting`` property. .. _compiling-the-hello-world-smart-contract-dev: **************************************** Compiling the Hello World smart contract **************************************** A smart contract in C# must be compiled into CIL before it can be deployed. For this, we are going to use the `Stratis Smart Contract Tool `_. :: git clone https://github.com/stratisproject/Stratis.SmartContracts.Tools.Sct Execute the following command: ``dotnet run validate [PATH_TO_SMART_CONTRACT] -sb``. A relative path to ```HelloWorld.cs`` in your Stratis Full Node repository should work fine. To see more information on the options available for the sct ``validate`` command, use the following command: ``dotnet run validate --help`` To see the general help on the sct, use the following command: ``dotnet run --help`` The output from executing the Smart Contract validation will look like the below: :: Smart Contract Validator Compiling ..\HelloWorld.cs... Compilation OK Building ModuleDefinition ModuleDefinition built successfully Validating file ..\HelloWorld.cs... ====== Smart Contract Validation results for file ..\HelloWorld.cs ====== Compilation Result Compilation OK: True Format Validation Result Format Valid: True Determinism Validation Result Determinism Valid: True Hash e6cff849009d3bd01d2db606a10bb5a792ce4a0a995f33a2621bcc1c06d8a766 ByteCode 4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C010200D45806930000000000000000E00022200B0130000006000000020000000000003A250000002000000040000000000010002000000002000004000000000000000400000000000000006000000002000000000000030040850000100000100000000010000010000000000000100000000000000000000000E82400004F000000000000000000000000000000000000000000000000000000004000000C000000CC2400001C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E7465787400000040050000002000000006000000020000000000000000000000000000200000602E72656C6F6300000C0000000040000000020000000800000000000000000000000000004000004200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C250000000000004800000002000500942000003804000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004602280500000A72010000706F0600000A2A4A02280500000A7201000070036F0700000A2A4E0203280800000A02721300007028020000062A1E0228010000062A00000042534A4201000100000000000C00000076342E302E33303331390000000005006C00000080010000237E0000EC0100009801000023537472696E677300000000840300003000000023555300B4030000100000002347554944000000C40300007400000023426C6F6200000000000000020000014715A0010900000000FA01330016000001000000080000000200000004000000020000000800000004000000010000000100000002000000010000000200000000000E0101000000000006008C0042010600BC004201060078002F010F00620100000A00AC0071010A00880171010A002C0071010A0053007101000000000100000000000100010001001000210000001900010001005020000000008108F4002F00010062200000000081080101330001007520000000008618290120000200892000000000860020012F00030000000100DA00000001004000090029010100110029010600190029010A002900290106003100640010004100E00015004100EA001A003100290120002E000B003C002E00130045002E001B006400430023006D00020001000000050138000200010003000100020003000480000000000000000000000000000000008801000004000000000000000000000026000A000000000001000200010000000000000000007101000000000000003C4D6F64756C653E0053797374656D2E507269766174652E436F72654C69620048656C6C6F576F726C640049536D617274436F6E7472616374537461746500736D617274436F6E74726163745374617465004950657273697374656E745374617465006765745F50657273697374656E7453746174650044656275676761626C6541747472696275746500436F6D70696C6174696F6E52656C61786174696F6E73417474726962757465004465706C6F794174747269627574650052756E74696D65436F6D7061746962696C6974794174747269627574650076616C756500476574537472696E6700536574537472696E67006765745F4772656574696E67007365745F4772656574696E6700536D617274436F6E74726163742E646C6C0053617948656C6C6F002E63746F720053797374656D2E446961676E6F73746963730053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300446562756767696E674D6F64657300537472617469732E536D617274436F6E74726163747300536D617274436F6E747261637400000000114700720065006500740069006E0067000019480065006C006C006F00200057006F0072006C006400210000000000434394DDB1A99046A0225689C4922D470004200101080320000105200101111104200012210420010E0E052002010E0E05200101121D087CEC85D7BEA7798E0320000E042001010E0328000E0801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F77730108010002000000000004010000000000000000000000000000000000100000000000000000000000000000001025000000000000000000002A2500000020000000000000000000000000000000000000000000001C250000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF2500200010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000C0000003C3500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ====== .. note:: If you are building the Stratis Smart Contract Tool from source and have previously cloned the repository, please ensure that before you compile any smart contracts, you sync the repository to the latest version of the source code and rebuild the tool. ************************ Interact with the Wallet ************************ Begin by making sure that you have the local development network running. :: docker container ls You should now be in possession of 100,000,000 CRS-TEST tokens within your wallet! You can confirm this by interacting with the Balance endpoint, but first, let's confirm the name of the wallet. :: curl -X GET "http://localhost:38223/api/Wallet/list-wallets" -H "accept: application/json" You should get a response like the below. :: {"walletNames":["cirrusdev"],"watchOnlyWallets":[]} The balance can now be queried by listing the addresses related to the previously discovered wallet. :: curl -X GET "http://localhost:38223/api/Wallet/addresses?WalletName=cirrusdev&AccountName=account%200" -H "accept: application/json" | jq '.' .. note:: jq has been utilised to prettify the JSON repsonse. The above GET will return a list of addresses, we need to find the address that has reiceved the pre-mine amount, this will be evident by the ``amountConfirmed`` value. :: { "address": "P9zz49VdoPrirKhU2DBytwVTdCupcR4wYh", "isUsed": false, "isChange": false, "amountConfirmed": 0, "amountUnconfirmed": 0 } .. _deploying-the-hello-world-smart-contract-dev: ********************************* Deploying the HelloWorld contract ********************************* Now we have interacted with the wallet, we have an address that we know has a balance to fund the associated costs with deploying the contract in question. The contract can be deployed by utilising the SmartContractWallet/Create endpoint. :: curl -X POST "http://localhost:38223/api/SmartContractWallet/create" -H "accept: application/json" -H "Content-Type: application/json-patch+json" -d "{ \"walletName\": \"cirrusdev\", \"amount\": \"0\", \"feeAmount\": \"0.001\", \"password\": \"stratis\", \"contractCode\": \"4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C010200D45806930000000000000000E00022200B0130000006000000020000000000003A250000002000000040000000000010002000000002000004000000000000000400000000000000006000000002000000000000030040850000100000100000000010000010000000000000100000000000000000000000E82400004F000000000000000000000000000000000000000000000000000000004000000C000000CC2400001C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E7465787400000040050000002000000006000000020000000000000000000000000000200000602E72656C6F6300000C0000000040000000020000000800000000000000000000000000004000004200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C250000000000004800000002000500942000003804000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004602280500000A72010000706F0600000A2A4A02280500000A7201000070036F0700000A2A4E0203280800000A02721300007028020000062A1E0228010000062A00000042534A4201000100000000000C00000076342E302E33303331390000000005006C00000080010000237E0000EC0100009801000023537472696E677300000000840300003000000023555300B4030000100000002347554944000000C40300007400000023426C6F6200000000000000020000014715A0010900000000FA01330016000001000000080000000200000004000000020000000800000004000000010000000100000002000000010000000200000000000E0101000000000006008C0042010600BC004201060078002F010F00620100000A00AC0071010A00880171010A002C0071010A0053007101000000000100000000000100010001001000210000001900010001005020000000008108F4002F00010062200000000081080101330001007520000000008618290120000200892000000000860020012F00030000000100DA00000001004000090029010100110029010600190029010A002900290106003100640010004100E00015004100EA001A003100290120002E000B003C002E00130045002E001B006400430023006D00020001000000050138000200010003000100020003000480000000000000000000000000000000008801000004000000000000000000000026000A000000000001000200010000000000000000007101000000000000003C4D6F64756C653E0053797374656D2E507269766174652E436F72654C69620048656C6C6F576F726C640049536D617274436F6E7472616374537461746500736D617274436F6E74726163745374617465004950657273697374656E745374617465006765745F50657273697374656E7453746174650044656275676761626C6541747472696275746500436F6D70696C6174696F6E52656C61786174696F6E73417474726962757465004465706C6F794174747269627574650052756E74696D65436F6D7061746962696C6974794174747269627574650076616C756500476574537472696E6700536574537472696E67006765745F4772656574696E67007365745F4772656574696E6700536D617274436F6E74726163742E646C6C0053617948656C6C6F002E63746F720053797374656D2E446961676E6F73746963730053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300446562756767696E674D6F64657300537472617469732E536D617274436F6E74726163747300536D617274436F6E747261637400000000114700720065006500740069006E0067000019480065006C006C006F00200057006F0072006C006400210000000000434394DDB1A99046A0225689C4922D470004200101080320000105200101111104200012210420010E0E052002010E0E05200101121D087CEC85D7BEA7798E0320000E042001010E0328000E0801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F77730108010002000000000004010000000000000000000000000000000000100000000000000000000000000000001025000000000000000000002A2500000020000000000000000000000000000000000000000000001C250000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF2500200010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000C0000003C3500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"gasPrice\": 100, \"gasLimit\": 100000, \"sender\": \"P9zz49VdoPrirKhU2DBytwVTdCupcR4wYh\"}" A prettified instance of the data passed can be seen below. :: { "walletName": "cirrusdev", "amount": "0", "feeAmount": "0.001", "password": "password", "contractCode":"4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C010200D45806930000000000000000E00022200B0130000006000000020000000000003A250000002000000040000000000010002000000002000004000000000000000400000000000000006000000002000000000000030040850000100000100000000010000010000000000000100000000000000000000000E82400004F000000000000000000000000000000000000000000000000000000004000000C000000CC2400001C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E7465787400000040050000002000000006000000020000000000000000000000000000200000602E72656C6F6300000C0000000040000000020000000800000000000000000000000000004000004200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C250000000000004800000002000500942000003804000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004602280500000A72010000706F0600000A2A4A02280500000A7201000070036F0700000A2A4E0203280800000A02721300007028020000062A1E0228010000062A00000042534A4201000100000000000C00000076342E302E33303331390000000005006C00000080010000237E0000EC0100009801000023537472696E677300000000840300003000000023555300B4030000100000002347554944000000C40300007400000023426C6F6200000000000000020000014715A0010900000000FA01330016000001000000080000000200000004000000020000000800000004000000010000000100000002000000010000000200000000000E0101000000000006008C0042010600BC004201060078002F010F00620100000A00AC0071010A00880171010A002C0071010A0053007101000000000100000000000100010001001000210000001900010001005020000000008108F4002F00010062200000000081080101330001007520000000008618290120000200892000000000860020012F00030000000100DA00000001004000090029010100110029010600190029010A002900290106003100640010004100E00015004100EA001A003100290120002E000B003C002E00130045002E001B006400430023006D00020001000000050138000200010003000100020003000480000000000000000000000000000000008801000004000000000000000000000026000A000000000001000200010000000000000000007101000000000000003C4D6F64756C653E0053797374656D2E507269766174652E436F72654C69620048656C6C6F576F726C640049536D617274436F6E7472616374537461746500736D617274436F6E74726163745374617465004950657273697374656E745374617465006765745F50657273697374656E7453746174650044656275676761626C6541747472696275746500436F6D70696C6174696F6E52656C61786174696F6E73417474726962757465004465706C6F794174747269627574650052756E74696D65436F6D7061746962696C6974794174747269627574650076616C756500476574537472696E6700536574537472696E67006765745F4772656574696E67007365745F4772656574696E6700536D617274436F6E74726163742E646C6C0053617948656C6C6F002E63746F720053797374656D2E446961676E6F73746963730053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300446562756767696E674D6F64657300537472617469732E536D617274436F6E74726163747300536D617274436F6E747261637400000000114700720065006500740069006E0067000019480065006C006C006F00200057006F0072006C006400210000000000434394DDB1A99046A0225689C4922D470004200101080320000105200101111104200012210420010E0E052002010E0E05200101121D087CEC85D7BEA7798E0320000E042001010E0328000E0801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F77730108010002000000000004010000000000000000000000000000000000100000000000000000000000000000001025000000000000000000002A2500000020000000000000000000000000000000000000000000001C250000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF2500200010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000C0000003C3500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "gasPrice": 100, "gasLimit": 100000, "sender": "P9zz49VdoPrirKhU2DBytwVTdCupcR4wYh" } .. note:: The password for the wallet **password**. The response recieved will be a Transaction ID. :: "8241686211eb182a0a153f9b2e9440a703fd848eb92c26e18be403090da05f7b" This Transaction ID can be used to confirm that the contract deployment has been accepted and also provide information about the deployment. This is done by interacting with the /SmartContracts/receipt endpoint. :: curl -X GET "http://localhost:38223/api/SmartContracts/receipt?txHash=8241686211eb182a0a153f9b2e9440a703fd848eb92c26e18be403090da05f7b" -H "accept: application/json" The response of this will tell you several things, the amount of GAS that was consumed, the status of the deployment and importantly, the address of the deployed contract. :: { "transactionHash": "8241686211eb182a0a153f9b2e9440a703fd848eb92c26e18be403090da05f7b", "blockHash": "bd033d197b6f6f7b7962ef2a42c29e2be6a7de9d278a0aa4d61e335bcb4ddb61", "postState": "1bed6aa13b7eb3a8714a2c81bde8c7442afbb8695a9cb3be6f59f216bbc90617", "gasUsed": 12428, "from": "P9zz49VdoPrirKhU2DBytwVTdCupcR4wYh", "to": null, "newContractAddress": "PWyA6fYiGFbJxaLqpPq3aSyGkHw9QNv9kY", "success": true, "returnValue": null, "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "error": null, "logs": [] } We have now deployed the contract and verified the contract address, in this instance we can see that the address is ``PWyA6fYiGFbJxaLqpPq3aSyGkHw9QNv9kY``. .. _calling-the-sayhello-method: ***************************** Calling the SayHello() method ***************************** We are going to call the ``SayHello()`` method, to do this we need to interact with the contract. :: curl -X POST "http://localhost:38223/api/contract/PWyA6fYiGFbJxaLqpPq3aSyGkHw9QNv9kY/method/SayHello" -H "accept: application/json" -H "GasPrice: 100" -H "GasLimit: 100000" -H "Amount: 0" -H "FeeAmount: 0.01" -H "WalletName: cirrusdev" -H "WalletPassword: password" -H "Sender: P9zz49VdoPrirKhU2DBytwVTdCupcR4wYh" -H "Content-Type: application/json" -d "{}" .. note:: It's important that we specify the ``newContractAddress`` in the URI and use an address that has a sufficient balance for the ``sender`` paramater. The response will tell us if the call was successfull and will also provide us with a Transaction ID to query. :: { "fee": 11000000, "hex": "0100000002088b9aee9e7e1f824678b90d034ab4bef6f4745fda3b5085c5a01e165ed7ca96000000006a47304402202fdb8e52a4d4543206b64c3860f0f46c92b3f02733e6f95284e763a9261d4fd902207f65c8ff1ab2b5b96820b4caa6a7d3e9643f5aa04c8935f2336049727683b93f012102d8d7e4e8c427038596e69f4ce944986eeeb1fc3eb7327fe7b39d71eb6b72f0a2ffffffff6096e216aeb1b12a4fe8b4fd7c7f05490d53cb6ca56cc391d88b1b9170d7bbb4010000006a4730440220309a929541f1680108c758a8af789e82cfe45cce0a13787f4c694752a07de651022020c9ffe6454cef09b7479f44a9f0af798c7fee47ddbdad5d283de60a931ab475012102d8d7e4e8c427038596e69f4ce944986eeeb1fc3eb7327fe7b39d71eb6b72f0a2ffffffff0200b60300000000001976a914bf64d5ee5f797568ac5624053fda4a9ee52a5e3f88ac000000000000000034c1010000006400000000000000a086010000000000ab687f2579fe17d447e20c6d188590a766dd9a54ca8853617948656c6c6f8000000000", "message": "Your CALL method SayHello transaction was successfully built.", "success": true, "transactionId": "67c707f5e85029e9f38586e28caed900b4653cc04db2d8c76780197472287a84" } From the above we can see that the call was successfull and we have been provided a Transaction ID. Pass this Transaction ID as a paramater to the /SmartContracts/receipt endpoint. :: curl -X GET "http://localhost:38223/api/SmartContracts/receipt?txHash=67c707f5e85029e9f38586e28caed900b4653cc04db2d8c76780197472287a84" -H "accept: application/json" The response from the above will give us a summary of the transaction but also a response from the call that was made. :: { "transactionHash": "67c707f5e85029e9f38586e28caed900b4653cc04db2d8c76780197472287a84", "blockHash": "67e058904b32ad9546713788105d0d5d2d7283a0e317adfad522e59f51e749b6", "postState": "1bed6aa13b7eb3a8714a2c81bde8c7442afbb8695a9cb3be6f59f216bbc90617", "gasUsed": 10038, "from": "P9zz49VdoPrirKhU2DBytwVTdCupcR4wYh", "to": "PWyA6fYiGFbJxaLqpPq3aSyGkHw9QNv9kY", "newContractAddress": null, "success": true, "returnValue": "Hello World!", "bloom": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "error": null, "logs": [] } ``Hello World!`` is returned from the call, as expected. Now we have deployed a basic HellowWorld contract, we can now look at extending the functionality.